Amazon Bedrock Intelligent Prompt Routing についてまとめてみた
こんにちは、森田です。
本記事では、re:Invent 2024 で発表された Amazon Bedrock Intelligent Prompt Routing の詳細をまとめてみました。
先にまとめ
- 適切なモデルに自動的に切り替え(ルーティング)する機能
- ルーティングはパラメータで一部調整可能
- 2024/12/15時点では、プレビュー中で制限あり
- 英語のプロンプトのみサポート
- デフォルトのルーティング設定のみ利用可能
- 追加料金は発生しない
Intelligent Prompt Routing
「Intelligent Prompt Routing」は名前の通り、プロンプトの内容に応じて適切なモデルへルーティングしてくれる機能です。
この機能を利用することで、
- 簡単なタスクは小さなモデル(Haiku)を利用して、素早く回答を生成する
- 複雑なタスクは大きなモデル(Sonnet)を利用して、品質の高い回答を生成する
といったユースケースに応じた回答生成が実現可能となります。
従来であれば、簡単なタスク+複雑なタスク
が入力されるケースでは、回答の品質を維持するため、大きなモデルを利用する必要がありました。
このようなケースで、Prompt Routing を使用することで、簡単なタスク
は小さなモデルで実行することができるため、コスト削減も期待できます。
ルーティングの仕組み
気になるのは、どのように判断してモデルを切り替えているのかという点です。
AWSドキュメントを確認したところ、以下のような文言がありました。
- Intelligent prompt routing can’t adjust routing decisions or responses based on application-specific performance data.
- Intelligent prompt routing might not always provide the most optimal routing for unique or specialized use cases. How effective the routing is depends on the initial training data.
上記からAWS側で「ルーティング判断用のモデル」が用意されているようです。
そのため、ルーティング性能もこの「ルーティング判断用のモデル」の学習状態に依存するため、ユースケースによっては適切にルーティングされない可能性なども考えられそうです。
Routing criteria(ルーティング基準)
Response quality difference
という項目がコンソール上からも確認できました。
そのため、一応、ルーティング基準を設定するパラメータはあるようです。
Response quality difference
このパラメータは、大きいモデルと小さいモデル間で応答品質の違いの許容度となります。
この値が小さいほど、応答品質の違いを許容しないことになり、値を大きく設定した場合と比較して、小さいモデルが選ばれにくくなります。
- 値が小さい
- 大きいモデルが選ばれやすい
- 値が大きい
- 小さいモデルが選ばれやすい
ルーター
ルーティング設定を行うリソースをルーターと呼ぶようです。
なお、プレビュー時では、デフォルト設定のルーター(デフォルトルーター)のみが可能です。
- Anthropic Prompt Router
- Meta Prompt Router
GAのタイミングで、Router settings
が柔軟に設定できるようになりそうですね。
API からの利用
API から利用する際には、ルーターのARNの指定します。
import boto3
region_name = "us-west-2"
sts = boto3.client('sts')
account_id = sts.get_caller_identity()['Account']
client = boto3.client("bedrock-runtime", region_name=region_name)
response = client.converse(
modelId=f"arn:aws:bedrock:{region_name}:{account_id}:default-prompt-router/anthropic.claude:1",
messages=[
{
"role": "user",
"content": [{"text": "Alice has N brothers and she also has M sisters. How many sisters does Alice’s brothers have?"}],
}
],
inferenceConfig={
"temperature": 0.1,
"topP": 0.9,
"maxTokens": 500,
"stopSequences":[]
}
)
print(response["output"]["message"]["content"][0]["text"])
print("modelId:", response['trace']['promptRouter']['invokedModelId'].split("inference-profile")[1])
response = client.converse(
modelId=f"arn:aws:bedrock:{region_name}:{account_id}:default-prompt-router/anthropic.claude:1",
messages=[
{
"role": "user",
"content": [{"text": "Describe the purpose of a 'hello world' program in one line."}],
}
],
inferenceConfig={
"temperature": 0.1,
"topP": 0.9,
"maxTokens": 500,
"stopSequences":[]
}
)
print(response["output"]["message"]["content"][0]["text"])
print("modelId:", response['trace']['promptRouter']['invokedModelId'].split("inference-profile")[1])
To solve this problem, let's think through it step-by-step:
1. Alice has N brothers and M sisters.
2. We need to find out how many sisters Alice's brothers have.
3. Alice's brothers will have the same sisters as Alice does, except for Alice herself.
4. This means that Alice's brothers have all of Alice's sisters, but not Alice.
5. So, the number of sisters that Alice's brothers have is equal to the number of Alice's sisters (M).
Therefore, Alice's brothers have M sisters.
This solution assumes that we're only considering full siblings (same parents). If we were to consider half-siblings or step-siblings, more information would be needed to solve the problem accurately.
> modelId: /us.anthropic.claude-3-5-sonnet-20240620-v1:0
The purpose of a 'hello world' program is to serve as a simple and straightforward introduction to programming, demonstrating the basic structure and functionality of a programming language.
> modelId: /us.anthropic.claude-3-haiku-20240307-v1:0
さいごに
Prompt Routing の詳細について確認してみましたが、まだプレビュー中であるため情報が少なかったです。
今後GAのタイミングでルーティングを開発者側でどこまで制御できるか、そして日本語対応されるかが気になりますね。